const fs = require("fs").promises;
const path = require("path");
const config = require("./config");
const { log } = require("console");

module.exports = {
  async writeFiles(map) {
    if (!map || map.size === 0) {
      console.warn("⚠️ 没有需要写入的常量数据");
      return;
    }

    // 遍历配置中的输出文件
    if (!config.list || config.list.length === 0) {
      console.warn("⚠️ 没有配置输出文件");
      return;
    }

    for (let i = 0; i < config.list.length; i++) {
      try {
        const item = config.list[i];
        const data = map.get(item.name);
        if (!!data) {
          console.log(`📂 准备写入文件: ${item.outputFile.path}`);
          const content = item.outputFile.format(data);
          const dir = path.dirname(item.outputFile.path);
          // 确保目录存在
          await fs.mkdir(dir, { recursive: true });
          // 版本检查（防止覆盖未提交的修改）
          if (item.versionCheck) {
            const currentContent = await fs
              .readFile(item.outputFile.path, "utf8")
              .catch(() => "");
            if (
              currentContent.includes("// AUTO-GENERATED FILE") &&
              !currentContent.includes("DO NOT EDIT DIRECTLY")
            ) {
              throw new Error(
                "文件包含未提交的修改，请检查: " + item.outputFile.path
              );
            }
          }

          await fs.writeFile(item.outputFile.path, content);
          console.log(`✅ 成功写入: ${item.outputFile.path}`);
        }
      } catch (error) {
        console.error(`💥 写入失败 [${item.name}]:`, error.message);
      }
    }
  }
};
